snapcast: fix compilation with boost 1.87.0
authorSzabolcs Hubai <[email protected]>
Fri, 17 Jan 2025 21:39:10 +0000 (22:39 +0100)
committerTianling Shen <[email protected]>
Tue, 9 Sep 2025 04:57:14 +0000 (12:57 +0800)
After revisiting the PR, it didn't even compile because of commit
c50de920a225a ("boost: Updates package to version 1.87.0").

Signed-off-by: Szabolcs Hubai <[email protected]>
sound/snapcast/Makefile
sound/snapcast/patches/001-v0.29.0-fix-compilation-with-boost-v1.87.0.patch [new file with mode: 0644]
sound/snapcast/patches/002-v0.30.0-use-make_address-from-boost-as-from_string-is-deprecated-1308.patch [new file with mode: 0644]
sound/snapcast/patches/003-v0.30.0-fix-compilation-with-boost-v1.87.0.patch [new file with mode: 0644]

index df23e780ab7e346c1a6c1025c26277e62a9806bf..354492e181612aaecf4ec198f3aae384a8d0b000 100644 (file)
@@ -81,7 +81,10 @@ define Package/snapserver/install
        $(INSTALL_BIN) $(PKG_BUILD_DIR)/bin/snapserver $(1)/usr/bin/
        $(INSTALL_DIR) $(1)/etc/init.d
        $(INSTALL_BIN) ./files/snapserver.init $(1)/etc/init.d/snapserver
-       $(INSTALL_BIN) $(PKG_BUILD_DIR)/server/etc/snapserver.conf $(1)/etc/snapserver.conf
+       $(INSTALL_CONF) $(PKG_BUILD_DIR)/server/etc/snapserver.conf $(1)/etc/snapserver.conf
+       $(INSTALL_DIR) $(1)/etc/config
+       $(INSTALL_CONF) ./files/snapserver.conf $(1)/etc/config/snapserver
+
 endef
 
 define Package/snapclient/install
@@ -89,6 +92,8 @@ define Package/snapclient/install
        $(INSTALL_BIN) $(PKG_BUILD_DIR)/bin/snapclient $(1)/usr/bin/
        $(INSTALL_DIR) $(1)/etc/init.d
        $(INSTALL_BIN) ./files/snapclient.init $(1)/etc/init.d/snapclient
+       $(INSTALL_DIR) $(1)/etc/config
+       $(INSTALL_CONF) ./files/snapclient.conf $(1)/etc/config/snapclient
 endef
 
 $(eval $(call BuildPackage,snapserver))
diff --git a/sound/snapcast/patches/001-v0.29.0-fix-compilation-with-boost-v1.87.0.patch b/sound/snapcast/patches/001-v0.29.0-fix-compilation-with-boost-v1.87.0.patch
new file mode 100644 (file)
index 0000000..743ff73
--- /dev/null
@@ -0,0 +1,29 @@
+From 6ada939adf5c4f7e43d0fbe6ea45492b9564cb8d Mon Sep 17 00:00:00 2001
+From: badaix <[email protected]>
+Date: Thu, 19 Dec 2024 22:53:49 +0100
+Subject: [PATCH] Fix compilation with boost v1.87.0
+
+---
+ server/control_server.cpp | 6 +++---
+ 1 file changed, 3 insertions(+), 3 deletions(-)
+
+--- a/server/control_server.cpp
++++ b/server/control_server.cpp
+@@ -161,7 +161,7 @@ void ControlServer::start()
+             {
+                 LOG(INFO, LOG_TAG) << "Creating TCP acceptor for address: " << address << ", port: " << tcp_settings_.port << "\n";
+                 acceptor_tcp_.emplace_back(make_unique<tcp::acceptor>(boost::asio::make_strand(io_context_.get_executor()),
+-                                                                      tcp::endpoint(boost::asio::ip::address::from_string(address), tcp_settings_.port)));
++                                                                      tcp::endpoint(boost::asio::ip::make_address(address), settings_.tcp.port)));
+             }
+             catch (const boost::system::system_error& e)
+             {
+@@ -177,7 +177,7 @@ void ControlServer::start()
+             {
+                 LOG(INFO, LOG_TAG) << "Creating HTTP acceptor for address: " << address << ", port: " << http_settings_.port << "\n";
+                 acceptor_http_.emplace_back(make_unique<tcp::acceptor>(boost::asio::make_strand(io_context_.get_executor()),
+-                                                                       tcp::endpoint(boost::asio::ip::address::from_string(address), http_settings_.port)));
++                                                                       tcp::endpoint(boost::asio::ip::make_address(address), settings_.http.port)));
+             }
+             catch (const boost::system::system_error& e)
+             {
diff --git a/sound/snapcast/patches/002-v0.30.0-use-make_address-from-boost-as-from_string-is-deprecated-1308.patch b/sound/snapcast/patches/002-v0.30.0-use-make_address-from-boost-as-from_string-is-deprecated-1308.patch
new file mode 100644 (file)
index 0000000..65d09f4
--- /dev/null
@@ -0,0 +1,87 @@
+From b2fd2bf9ef835104a813c40c190d71e3644125d7 Mon Sep 17 00:00:00 2001
+From: Rudi Heitbaum <[email protected]>
+Date: Thu, 19 Dec 2024 02:23:11 +1100
+Subject: [PATCH] use make_address from boost as from_string is deprecated
+ (#1308)
+
+Since boost 1.87.0 boost::asio::ip::address::from_string is no longer available
+
+ref: https://github.com/boostorg/asio/commit/c0d1cfce7767599c4cf00df36f8017a1073339ae
+
+fixes:
+    ../server/control_server.cpp: In member function 'void ControlServer::start()':
+    ../server/control_server.cpp:164:111: error: 'from_string' is not a member of 'boost::asio::ip::address'
+      164 |                                                                       tcp::endpoint(boost::asio::ip::address::from_string(address), tcp_settings_.port)));
+          |                                                                                                               ^~~~~~~~~~~
+    ../server/control_server.cpp:180:112: error: 'from_string' is not a member of 'boost::asio::ip::address'
+      180 |                                                                        tcp::endpoint(boost::asio::ip::address::from_string(address), http_settings_.port)));
+          |                                                                                                                ^~~~~~~~~~~
+    ../server/streamreader/tcp_stream.cpp: In constructor 'streamreader::TcpStream::TcpStream(streamreader::PcmStream::Listener*, boost::asio::io_context&, const ServerSettings&, const streamreader::StreamUri&)':
+    ../server/streamreader/tcp_stream.cpp:67:97: error: 'from_string' is not a member of 'boost::asio::ip::address'
+       67 |         acceptor_ = make_unique<tcp::acceptor>(strand_, tcp::endpoint(boost::asio::ip::address::from_string(host_), port_));
+          |                                                                                                 ^~~~~~~~~~~
+    ../server/streamreader/tcp_stream.cpp: In member function 'virtual void streamreader::TcpStream::connect()':
+    ../server/streamreader/tcp_stream.cpp:96:75: error: 'from_string' is not a member of 'boost::asio::ip::address'
+       96 |         boost::asio::ip::tcp::endpoint endpoint(boost::asio::ip::address::from_string(host_), port_);
+          |                                                                           ^~~~~~~~~~~
+    ../server/stream_server.cpp: In member function 'void StreamServer::start()':
+    ../server/stream_server.cpp:234:103: error: 'from_string' is not a member of 'boost::asio::ip::address'
+      234 |                                                               tcp::endpoint(boost::asio::ip::address::from_string(address), settings_.stream.port)));
+          |
+---
+ server/control_server.cpp          | 4 ++--
+ server/stream_server.cpp           | 2 +-
+ server/streamreader/tcp_stream.cpp | 4 ++--
+ 3 files changed, 5 insertions(+), 5 deletions(-)
+
+--- a/server/control_server.cpp
++++ b/server/control_server.cpp
+@@ -161,7 +161,7 @@ void ControlServer::start()
+             {
+                 LOG(INFO, LOG_TAG) << "Creating TCP acceptor for address: " << address << ", port: " << tcp_settings_.port << "\n";
+                 acceptor_tcp_.emplace_back(make_unique<tcp::acceptor>(boost::asio::make_strand(io_context_.get_executor()),
+-                                                                      tcp::endpoint(boost::asio::ip::make_address(address), settings_.tcp.port)));
++                                                                      tcp::endpoint(boost::asio::ip::make_address(address), tcp_settings_.port)));
+             }
+             catch (const boost::system::system_error& e)
+             {
+@@ -177,7 +177,7 @@ void ControlServer::start()
+             {
+                 LOG(INFO, LOG_TAG) << "Creating HTTP acceptor for address: " << address << ", port: " << http_settings_.port << "\n";
+                 acceptor_http_.emplace_back(make_unique<tcp::acceptor>(boost::asio::make_strand(io_context_.get_executor()),
+-                                                                       tcp::endpoint(boost::asio::ip::make_address(address), settings_.http.port)));
++                                                                       tcp::endpoint(boost::asio::ip::make_address(address), http_settings_.port)));
+             }
+             catch (const boost::system::system_error& e)
+             {
+--- a/server/stream_server.cpp
++++ b/server/stream_server.cpp
+@@ -231,7 +231,7 @@ void StreamServer::start()
+         {
+             LOG(INFO, LOG_TAG) << "Creating stream acceptor for address: " << address << ", port: " << settings_.stream.port << "\n";
+             acceptor_.emplace_back(make_unique<tcp::acceptor>(boost::asio::make_strand(io_context_.get_executor()),
+-                                                              tcp::endpoint(boost::asio::ip::address::from_string(address), settings_.stream.port)));
++                                                              tcp::endpoint(boost::asio::ip::make_address(address), settings_.stream.port)));
+         }
+         catch (const boost::system::system_error& e)
+         {
+--- a/server/streamreader/tcp_stream.cpp
++++ b/server/streamreader/tcp_stream.cpp
+@@ -64,7 +64,7 @@ TcpStream::TcpStream(PcmStream::Listener
+     LOG(INFO, LOG_TAG) << "TcpStream host: " << host_ << ", port: " << port_ << ", is server: " << is_server_ << "\n";
+     if (is_server_)
+-        acceptor_ = make_unique<tcp::acceptor>(strand_, tcp::endpoint(boost::asio::ip::address::from_string(host_), port_));
++        acceptor_ = make_unique<tcp::acceptor>(strand_, tcp::endpoint(boost::asio::ip::make_address(host_), port_));
+ }
+@@ -93,7 +93,7 @@ void TcpStream::connect()
+     else
+     {
+         stream_ = make_unique<tcp::socket>(strand_);
+-        boost::asio::ip::tcp::endpoint endpoint(boost::asio::ip::address::from_string(host_), port_);
++        boost::asio::ip::tcp::endpoint endpoint(boost::asio::ip::make_address(host_), port_);
+         stream_->async_connect(endpoint,
+                                [this](const boost::system::error_code& ec)
+                                {
diff --git a/sound/snapcast/patches/003-v0.30.0-fix-compilation-with-boost-v1.87.0.patch b/sound/snapcast/patches/003-v0.30.0-fix-compilation-with-boost-v1.87.0.patch
new file mode 100644 (file)
index 0000000..b4dd2f8
--- /dev/null
@@ -0,0 +1,44 @@
+From 6190041e863968d76b6d16140bba90be6dff848f Mon Sep 17 00:00:00 2001
+From: badaix <[email protected]>
+Date: Thu, 19 Dec 2024 21:36:08 +0100
+Subject: [PATCH] Fix compilation with boost v1.87.0
+
+---
+ client/client_connection.cpp | 5 ++---
+ server/stream_session_ws.cpp | 2 +-
+ 2 files changed, 3 insertions(+), 4 deletions(-)
+
+--- a/client/client_connection.cpp
++++ b/client/client_connection.cpp
+@@ -124,10 +124,9 @@ std::string ClientConnection::getMacAddr
+ void ClientConnection::connect(const ResultHandler& handler)
+ {
+-    tcp::resolver::query query(server_.host, cpt::to_string(server_.port), boost::asio::ip::resolver_query_base::numeric_service);
+     boost::system::error_code ec;
+     LOG(INFO, LOG_TAG) << "Resolving host IP for: " << server_.host << "\n";
+-    auto iterator = resolver_.resolve(query, ec);
++    auto iterator = resolver_.resolve(server_.host, cpt::to_string(server_.port), boost::asio::ip::resolver_query_base::numeric_service, ec);
+     if (ec)
+     {
+         LOG(ERROR, LOG_TAG) << "Failed to resolve host '" << server_.host << "', error: " << ec.message() << "\n";
+@@ -141,7 +140,7 @@ void ClientConnection::connect(const Res
+     for (const auto& iter : iterator)
+     {
+         LOG(INFO, LOG_TAG) << "Connecting to " << iter.endpoint() << "\n";
+-        socket_.connect(*iterator, ec);
++        socket_.connect(iter, ec);
+         if (!ec || (ec == boost::system::errc::interrupted))
+         {
+             // We were successful or interrupted, e.g. by sig int
+--- a/server/stream_session_ws.cpp
++++ b/server/stream_session_ws.cpp
+@@ -114,7 +114,7 @@ void StreamSessionWebsocket::on_read_ws(
+         return;
+     }
+-    auto* data = boost::asio::buffer_cast<char*>(buffer_.data());
++    auto* data = static_cast<char*>(buffer_.data().data());
+     baseMessage_.deserialize(data);
+     LOG(DEBUG, LOG_TAG) << "getNextMessage: " << baseMessage_.type << ", size: " << baseMessage_.size << ", id: " << baseMessage_.id
+                         << ", refers: " << baseMessage_.refersTo << "\n";